
#include "Komunikacja.h"

#define BUFSIZE	10

class Llotnisko;
//GOGOGOGO KARBOS!!
void Komunikacja::DB_getLotnisko(int id, LLotnisko * lotn)
{

	int i = 0;
    Message * mes;
	lotniskoEv * airportAI;

	
	mes = new Message();
	mes->setType( GET_AIRPORT_AI_DB);
	mes->setConnReceiverName("DATABASE");
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
     mes->setIntArg1(id);    
   
   airportAI = new lotniskoEv();
 	
	ConnectorAirport::getInstance()->setAirportAI (airportAI);
    
   sendMessage(*mes);
  
   	sem_wait(&ConnectorAirport::getInstance()->semAirportDB_AI);	//czeka, az przyjdzie cala poczta
   
    lotn->getLotnisko( airportAI->id_lotniska,  airportAI->nazwa, airportAI->pojemnosc, airportAI->szerokosc_geo, airportAI->dlugosc_geo, 
		airportAI->ilosc_waskich_pasow, airportAI->ilosc_szerokich_pasow);
}

void Komunikacja::DB_getSamolot(string nazwa,Samolot * samolot)
{
int i = 0;
	Message* mes;
	samolot_dla_lotniska * samo;

	mes = new Message();
	mes->setType( GET_PLANE_AI_DB);
	
	mes->setConnReceiverName("DATABASE");
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
     mes->setStringArg1( (char*)nazwa.c_str() );
 
 	samo = new samolot_dla_lotniska();
 	
 	
	ConnectorAirport::getInstance()->setPlaneAI ( samo);
    	
     sendMessage(*mes);
  
   	sem_wait(&ConnectorAirport::getInstance()->semPlaneDB_AI);	//czeka, az przyjdzie cala poczta
		
	samolot->getSamolot( samo->czas_obslugi, samo->czy_szeroki);	

}


//ustawia awarie w lotnisku
//ma wywolywac funkcje lotniska setAwaria()
void Komunikacja::Kom_setAwaria (string nazwa, string podtyp,int  stopien){


		lotnisko->setAwaria(nazwa,podtyp,stopien);	
}


//usuwa awarie na lotnisku
//ma wywolywac funkcje lotniska resetAwaria()
void Komunikacja::Kom_resetAwaria (string nazwa){


		lotnisko->resetAwaria(nazwa);
}









void Komunikacja::Kom_ChceStartowac(int id){
					lotnisko->listaSamolotow[id]->setStatus(chceStartowac);		
}



void Komunikacja::Kom_wystartujSamolot(int id){

//wyslij sygnal somolotowi ze moze startowac
	Message* mes;
	char * buf = new char[ BUFSIZE];
	mes = new Message();
	mes->setType( MSG_ZEZWOLENIE_NA_START);

	itoa(id, buf,  BUFSIZE);
	
	mes->setConnReceiverName(buf);
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
    mes->setIntArg1(0 );
     sendMessage(*mes);
     	cout << "Wystartuj samolot"<<endl;
}


void Komunikacja::Kom_zakazStartu(int id, int czas){

//wyslij sygnal samolotowi ze narazie ma zakaz i moze pytac ponownie po wyslanym czasie
	Message* mes;
	char * buf = new char[ BUFSIZE];
	mes = new Message();
	mes->setType( ZAKAZ_STARTU);
	
	itoa(id, buf,  BUFSIZE);
	mes->setConnReceiverName(buf);
	mes->setIntArg1(czas);
	//cout << "start po czasie :" <<czas<<endl;
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
     sendMessage(*mes);
}



void Komunikacja::Kom_ChceLadowac(int id,bool awaria){
					lotnisko->listaSamolotow[id]->setStatus(chceLadowac);			
}



void Komunikacja::Kom_wyladujSamolot(int id){


cout << "KOM WYLADUJ SAMOLOT"<<endl;
	//wyslij sygnal somolotowi ze moze ladowac
	Message* mes;
	char * buf = new char[ BUFSIZE];
	mes = new Message();
	mes->setType( MSG_MOZESZ_LADOWAC);
	
	itoa(id, buf,  BUFSIZE);
	mes->setConnReceiverName(buf);
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
    sendMessage(*mes);
}


void Komunikacja::Kom_zakazLadowania(int id, int czas){

	//wyslij sygnal somolotowi ze nie moze ladowac ale moze probowac znowu po czasie
	Message* mes;
	char * buf = new char[ BUFSIZE];
	mes = new Message();
	mes->setType(ZAKAZ_LADOWANIA);
	
	itoa(id, buf,  BUFSIZE);
	mes->setIntArg1(czas);
	mes->setConnReceiverName(buf);
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
	
    sendMessage(*mes);
}


void Komunikacja::Kom_odeslijSamolot(int id){

	//niech szuka sobie innego lotniska bo u nas nic z tego
	Message* mes;
	char * buf = new char[ BUFSIZE];
	cout << "ID sanmolotu : " << id <<endl;
	mes = new Message();
	mes->setType( MSG_ZMIEN_KURS);
	itoa(id, buf,  BUFSIZE);
	mes->setConnReceiverName(buf);
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
    sendMessage(*mes); 
}


void Komunikacja::Kom_samolotStrefaIN(int id, string model)
{
cout<<"Samolot w strefie"<<endl;
	Samolot  * samolot=new Samolot(id,model,this);
	samolot->setStatus(leci);	
     lotnisko->dodajSamolot(samolot);
	
}


void Komunikacja::Kom_samolotNaLotnisku(int id, string model)
{
	cout<<"Samolot na lotnisku"<<endl;
	Samolot * samolot = new Samolot(id,model,this);
	samolot->setStatus(naZiemi);
     lotnisko->dodajSamolot(samolot);

}


void Komunikacja::Kom_samolotStrefaOUT(int id, string model)
{
	cout<<"Samolot wypad z strefy"<<endl;
	PtEnter(0);
	lotnisko->gui->zniknijzListy(id);
	PtDestroyWidget( lotnisko->listaSamolotow[id]->ikonka);
	PtLeave(0);
	delete lotnisko->listaSamolotow[id];
	lotnisko->listaSamolotow[id]=NULL;
}



void Komunikacja::Kom_polozenieSamolotu(int id,float szerokosc, float dlugosc)
{
lotnisko->polozenieSamolotu(id,szerokosc,dlugosc); 
}



void Komunikacja::Kom_samolotKILL(int id){

	Message* mes;
	char * buf = new char[ BUFSIZE];
	
	mes = new Message();
	mes->setType( MSG_GON_SIE);
	
	itoa(id, buf,  BUFSIZE);
	mes->setConnReceiverName(buf);
	mes->setConnSenderName( ConnectorAirport::getInstance()->getConnName() );
    sendMessage(*mes); 

}
//gdy shangarowany.




